package com.snj.test2507;

public class StringValidator {

    public static boolean isValidString(String input) {
        // 检查长度是否在8到16之间
        if (input.length() < 8 || input.length() > 16) {
            return false;
        }

        // 标志位，用于检查是否包含大写字母、小写字母、数字
        boolean hasUpperCase = false;
        boolean hasLowerCase = false;
        boolean hasDigit = false;

        // 遍历字符串，检查字符类型
        for (char ch : input.toCharArray()) {
            if (Character.isUpperCase(ch)) {
                hasUpperCase = true;
            } else if (Character.isLowerCase(ch)) {
                hasLowerCase = true;
            } else if (Character.isDigit(ch)) {
                hasDigit = true;
            }

            // 如果已经满足至少两种类型，可以提前退出循环
            if ((hasUpperCase && hasLowerCase) || (hasUpperCase && hasDigit) || (hasLowerCase && hasDigit)) {
                break;
            }
        }

        // 返回是否满足至少两种类型
        return (hasUpperCase && hasLowerCase) || (hasUpperCase && hasDigit) || (hasLowerCase && hasDigit);
    }

    public static void main(String[] args) {
        // 测试用例
        String test1 = "Abcdefg1"; // 包含大写、小写、数字，长度8
        String test2 = "abcdefgh"; // 只包含小写，长度8
        String test3 = "12345678"; // 只包含数字，长度8
        String test4 = "ABCDEFGH"; // 只包含大写，长度8
        String test5 = "Abcdefghijklmnop"; // 包含大写、小写，长度16
        String test6 = "Abc123"; // 包含大写、小写、数字，但长度不足8
        String test7 = "Abcdefgh123456789"; // 包含大写、小写、数字，但长度超过16

        System.out.println(isValidString(test1)); // true
        System.out.println(isValidString(test2)); // false
        System.out.println(isValidString(test3)); // false
        System.out.println(isValidString(test4)); // false
        System.out.println(isValidString(test5)); // true
        System.out.println(isValidString(test6)); // false
        System.out.println(isValidString(test7)); // false
    }
}